package com.farm2.llm.client.impl;

import com.farm2.llm.client.handle.inter.Farm2LlmMessageHandleInter;
import com.farm2.llm.client.inter.Farm2LlmClientInter;
import com.farm2.llm.client.msg.ChatMsg;
import com.plexpt.chatgpt.ChatGPTStream;
import com.plexpt.chatgpt.entity.chat.ChatCompletion;
import com.plexpt.chatgpt.entity.chat.Message;
import com.plexpt.chatgpt.listener.AbstractStreamListener;
import okhttp3.sse.EventSource;
import org.farm2.base.db.process.FarmProcessUtils;
import org.farm2.llm.domain.LlmClient;
import org.farm2.tools.i18n.string.FarmStringUtils;
import org.farm2.tools.json.FarmJsons;
import org.farm2.tools.web.dto.SendMsgDto;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Component
public class Farm2LlmDemoClientImpl implements Farm2LlmClientInter {
    private LlmClient paras = null;
    private static ExecutorService fixedThreadPool = Executors.newFixedThreadPool(20);

    @Override
    public String getName() {
        return "demo_Talk_SDK";
    }

    @Override
    public void init(LlmClient client) {
        paras = client;
    }

    @Override
    public int getTokenSize() {
        return paras.getTokensize();
    }


    @Override
    public void sendMsg(ChatMsg msg, Farm2LlmMessageHandleInter handle) {
        final StringBuffer backMsg = new StringBuffer();
        if (msg.getMsg().indexOf("直接生成15字以内的标题") >= 0) {
            backMsg.append("这是一个15字的演示标题"+paras.getNote());
        } else if (msg.getMsg().indexOf("直接生成100字以内的摘要") >= 0) {
            backMsg.append("这是一个100字的演示摘要"+paras.getNote());
            backMsg.append("您目前使用的是演示环境，由于演示环境的限制，系统无法生成实际内容，也无法提供智能回答。这一模式主要是为了让您体验交互流程和功能界面。\n" +
                    "如果需要获得真实的内容生成或智能回答，请确保在正式环境中使用，或者前往系统后台配置相应的模型服务。配置完成后，系统将能够为您提供更加精准、智能的服务！\n" +
                    "如有其他疑问，欢迎随时向我们反馈。感谢您的理解与支持！ \uD83D\uDE0A");
        } else {
            backMsg.append("您好！您的问题是：{{" + msg.getMsg() + "}}"+paras.getNote());
            backMsg.append("，您目前使用的是演示环境，由于演示环境的限制，系统无法生成实际内容，也无法提供智能回答。这一模式主要是为了让您体验交互流程和功能界面。\n" +
                    "\n" +
                    "如果需要获得真实的内容生成或智能回答，请确保在正式环境中使用，或者前往系统后台配置相应的模型服务。配置完成后，系统将能够为您提供更加精准、智能的服务！\n" +
                    "\n" +
                    "如有其他疑问，欢迎随时向我们反馈。感谢您的理解与支持！ \uD83D\uDE0A");
        }

        fixedThreadPool.submit(() -> {
            for (String str : FarmStringUtils.splitStringByLength(backMsg.toString(), 10)) {
                FarmProcessUtils.sleep(300);
                handle.onMsg(str);
            }
            handle.onClosed();
        });
    }
}
